package main

import (
	"fmt"
	"strconv"
	"unicode/utf8"
)

func main() {
	// 1.字符串的本质是utf-8序列
	var name string = "武沛齐"
	// 武 11100110 10101101 10100110
	fmt.Println(name[0],strconv.FormatInt(int64(name[0]),2))
	fmt.Println(name[1],strconv.FormatInt(int64(name[1]),2))
	fmt.Println(name[2],strconv.FormatInt(int64(name[2]),2))
	// 沛 11100110 10110010 10011011
	fmt.Println(name[3],strconv.FormatInt(int64(name[3]),2))
	fmt.Println(name[4],strconv.FormatInt(int64(name[4]),2))
	fmt.Println(name[5],strconv.FormatInt(int64(name[5]),2))
	// 齐 11101001 10111101 10010000
	fmt.Println(name[6],strconv.FormatInt(int64(name[6]),2))
	fmt.Println(name[7],strconv.FormatInt(int64(name[7]),2))
	fmt.Println(name[8],strconv.FormatInt(int64(name[8]),2))

	// 2.获取字符串的长度
	fmt.Println(len(name))

	// 3.字符串转为字节的集合
	byteSet := []byte(name)
	fmt.Println(byteSet)	//[230 173 166 230 178 155 233 189 144]

	// 4.字节的集合转换位字符串
	byteList := []byte{230, 173, 166, 230, 178, 155, 233, 189, 144}
	targetString := string(byteList)
	fmt.Println(targetString)	//武沛齐

	// 5.将字符串转unicode字符码点的集合-rune	ucs4
	tempSet := []rune(name)
	fmt.Println(tempSet)	//[27494 27803 40784]
	fmt.Println(tempSet[0],strconv.FormatInt(int64(tempSet[0]),16))	//27494 6b66 unicode编码
	fmt.Println(tempSet[1],strconv.FormatInt(int64(tempSet[1]),16))	//27803 6c9b unicode编码
	fmt.Println(tempSet[2],strconv.FormatInt(int64(tempSet[2]),16))	//40784 9f50 unicode编码

	// 6.rune集合转换位字符串
	runeList := []rune{27494, 27803, 40784}
	targetName := string(runeList)
	fmt.Println(targetName)	//武沛齐

	// 7.长度的处理-字符串的长度
	length := utf8.RuneCountInString(name)
	fmt.Println(length)	// 3
}

